package org.dezenho.server.IP;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

import org.prevayler.Prevayler;
import org.prevayler.PrevaylerFactory;

/**
 * @author Dafne
 *
 */

public class Application {

	/**
	 * Preclipse generated field setting the location of the data folder!
	 */
	public final static String DATA_FOLDER = "data";

	public static String lerTeclado() {
		BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
		try { return reader.readLine(); } catch (IOException e1) { return "FIM"; }
	}
	public Application() {
		super();
	}

	/**
	 * @param ignored
	 * @throws Exception
	 */
	public static void main(String[] ignored) throws Exception {
		final Prevayler prevayler = PrevaylerFactory.createPrevayler(new ListaPalavras(), DATA_FOLDER);
		Thread snapShotThread = new Thread() {
			public void run() {
				while (true) {
					try {
						Thread.sleep(500);
						prevayler.takeSnapshot();
					} catch (Exception e) {
						e.printStackTrace();
					}
				}
			}
		};
		snapShotThread.start();
		System.out.print("Digite a palavra ou FIM para sair: ");
		String palavra = lerTeclado();
		while (!palavra.equals("FIM")) {
			try {
				prevayler.execute(new PalavraCreateTransaction(palavra));
			} catch (Exception e1) {
				e1.printStackTrace();
			}
			System.out.println("Palavra armazenada...\n");
			System.out.print("Digite uma palavra ou FIM para sair: ");
			palavra = lerTeclado();
		}
	
		System.out.println("\n Imprimindo palavras persistidas.\n");
		ListaPalavras lista = ((ListaPalavras) prevayler.prevalentSystem());
		for (int i = 1; i <= lista.size(); i++) {
			System.out.println(lista.get(i).getPalavra());
		}
		System.out.println("\n Retornando 1 palavra randomicamente\n");
		int randomInt = (int) (1+ (int)(lista.size()-1)*Math.random());
		System.out.println(lista.get(randomInt).getPalavra());
		System.out.println("\n Retornando 1 palavra pelo ID\n");
		System.out.println(lista.get(2).getPalavra());
	}
}